Previous Page Next Page

オープンソースによる地図表示(Leaflet編)追加分 その2

2019/5/17 by T. Fujita

追加-2、写真の撮影地を地図上に表示する

追加-2-1、マーカーで写真の撮影地を表示する

 多くのデジタル写真には、撮影日時や撮影場所等のEXIFデータが含まれており、スマホによってはデフォルトで写真の撮影場所を地図上に表示できるものがあります。  ここでは、『Leaflet_Tutrial_404.html』を元にEXIFデータが含まれる写真の撮影場所を地図上に表示させてみました。 EXIFデータの取得には『exif-jsというライブラリ』を使用しています。  また、EXIFデータが含まれていない写真の場合には、画面の中心にマーカーを表示しますので記憶にある撮影地付近に移動させてみて下さい。  表示されたマーカーをクリックすると当該写真がポップアップで表示されます。  なお、PC上の「Safari」では動作しませんでしたが、Android 7.0 及び iOS 12.2 での動作は確認しています。 以下にその表示例とソースファイルの内容を示します。 ソースファイルの内容では、追加した部分を赤字で表示しました。  単独で表示する場合は、『 Leaflet_Tutrial_Additional_003.html 』をクリックして下さい。

       写真の撮影地を地図上に表示する例
 ここで使用しているアイコン素材は、 FLAT ICON DESIGN および ICOON MONO から取得しており、
これらアイコン素材データの著作権は TopeconHeroes が保持しています。



       『 Leaflet_Tutrial_Additional_003.html 』のソースファイル内容
001  <!DOCTYPE html>
002  <html>
003  <head>
004	<title>Leaflet_Tutrial_Additional_003.html	2019/5/17	by T. Fujita</title>
005	<meta charset = "utf-8" />
006	<link rel = "stylesheet" href = "https://unpkg.com/leaflet@1.4.0/dist/leaflet.css" />
007	<link rel = "stylesheet" href = "https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
008	<link rel = "stylesheet" href = "./Plugins/ms-Dropdown-master/css/msdropdown/dd.css" />
009	<link rel = "stylesheet" href = "./CSS/scroll_menu.css" />
010	<link rel = "stylesheet" href = "./CSS/Original_Style_404.css" />
011
012  <style>
013	html, body {
014		width: 99%;
015		height: 98%;
016		font-size: 14px;
017		z-index: 0;
018	}
019
020	form img {
021		height: 100px;
022		order: 1;
023	}
024
025  </style>
026
027  <script src = "https://unpkg.com/leaflet@1.4.0/dist/leaflet.js"></script>
028  <script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
029  <script src = "https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
030  <script src = "https://cdnjs.cloudflare.com/ajax/libs/exif-js/2.2.1/exif.min.js"></script> 
031  <script src = "./Plugins/ms-Dropdown-master/js/msdropdown/jquery.dd.js"></script>
032  <script src = "./JS/Dialog_Additional_003.js" ></script> 
033  <script>
034	var Marker_LAT = new Array();
035	var Marker_LON = new Array();
036	var Marker_NAM = new Array();
037	var Marker_LNK = new Array();
038	var Marker_ICN = new Array();
039	var Marker_ID = new Array();
040	var Marker_Drag_flag = new Array();
041	var Marker_Drag_info = new Array();
042	var ClickLat = null;
043	var ClickLon = null;
044	var Marker_count = 0;
045	var Marker_ID_count = 0;
046	var SelectedID;
047	var Marker_flag = 0;
048	var Temp_shape, Temp_shape_clone;
049	var Temp, Temp_LAT, Temp_LON, Temp_NAM, Temp_LNK, Temp_ICN, Temp_ID;
050	var Temp_Drag_flag, Temp_Drag_info;
051	var Layer_404 = new Array();
052	var Layer_404_clone = new Array();
053	var Dialog_flag_001 = 0;
054	var Photo_Marker_LAT = new Array();
055	var Photo_Marker_LON = new Array();
056	var Photo_Marker_NAM = new Array();
057	var Photo_Marker_LNK = new Array();
058	var Photo_Marker_ICN = new Array();
059	var Photo_Marker_ID = new Array();
060	var Photo_Marker_Drag_flag = new Array();
061	var Photo_Marker_Drag_info = new Array();
062	var Photo_Marker_count = 0;
063	var Photo_Marker_ID_count = 0;
064	var Layer_AD003 = new Array();
065	var Layer_AD003_clone = new Array();
066	var map_AD003; 
067
068	function init() {
069		map_AD003 = L.map('map_AD003').setView([35.0, 137.0], 6);
070		mapLink = '<a href="https://openstreetmap.org">OpenStreetMap</a>';
071		L.tileLayer(
072  //			'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
073  //			attribution: 'Map data © ' + mapLink,
074  //			maxZoom: 18
075
076			'https://cyberjapandata.gsi.go.jp/xyz/pale/{z}/{x}/{y}.png', {
077			attribution: "<a href='https://maps.gsi.go.jp/development/ichiran.html' target='_blank'>地理院タイル</a>"
078	        }).addTo(map_AD003);
079		map_AD003.on('click', function(e) {
080			ClickLat = e.latlng.lat;
081			ClickLon = e.latlng.lng;
082			if ( Marker_flag == 1 ) { Leaflet_Marker_401(); }
083			if ( Marker_flag == 2 ) { Leaflet_Marker_403(); }
084		});
085	}
086
087	function Leaflet_Marker_400() {		// 初期設定(マーカー単独設置)
088		ClickLat = null;
089		ClickLon = null;
090		Marker_flag = 1;
091	}
092
093	function Leaflet_Marker_401() {		// マーカー単独設置
094	  if(Marker_flag == 1) {
095		Marker_LAT[ Marker_count ] = ClickLat;
096		Marker_LON[ Marker_count ] = ClickLon;
097		Marker_NAM[ Marker_count ] = Set_Text;
098		Marker_LNK[ Marker_count ] = " ";
099		Marker_ICN[ Marker_count ] = L.icon({
100			iconUrl: Icon_Url,
101			iconSize: [Icon_W, Icon_H],
102			iconAnchor : [Icon_AW, Icon_AH],
103			popupAnchor: [Icon_PW, Icon_PH]
104		});
105		Marker_ID[ Marker_count ] = "Marker" + Marker_ID_count;
106		Marker_Drag_flag[ Marker_count ] = true;
107		Marker_Drag_info[ Marker_count ] = "マウスで移動出来ます。";
108		Temp = Marker_count;
109		Marker_setting();
110		Marker_set();
111		Layer_404[ Temp ] = Temp_shape;
112		Layer_404[ Temp ].addTo(map_AD003);
113		Layer_404_clone[ Temp ] = Temp_shape_clone;
114		Layer_404_clone[ Temp ].addTo(map_AD003);
115		Marker_count = Marker_count + 1;
116		Marker_ID_count = Marker_ID_count + 1;
117		Marker_flag = 0;
118	    }
119	}
120
121	function Leaflet_Marker_402() {		// 初期設定(マーカー連続設置)
122		ClickLat = null;
123		ClickLon = null;
124		Marker_flag = 2;
125	}
126
127	function Leaflet_Marker_403() {		// マーカー連続設置
128	  if(Marker_flag == 2) {
129		Marker_LAT[ Marker_count ] = ClickLat;
130		Marker_LON[ Marker_count ] = ClickLon;
131		Marker_NAM[ Marker_count ] = Set_Text;
132		Marker_LNK[ Marker_count ] = " ";
133		Marker_ICN[ Marker_count ] = L.icon({
134			iconUrl: Icon_Url,
135			iconSize: [Icon_W, Icon_H],
136			iconAnchor : [Icon_AW, Icon_AH],
137			popupAnchor: [Icon_PW, Icon_PH]
138		});
139		Marker_ID[ Marker_count ] = "Marker" + Marker_ID_count;
140		Marker_Drag_flag[ Marker_count ] = true;
141		Marker_Drag_info[ Marker_count ] = "マウスで移動出来ます。";
142		Temp = Marker_count;
143		Marker_setting();
144		Marker_set();
145		Layer_404[ Temp ] = Temp_shape;
146		Layer_404[ Temp ].addTo(map_AD003);
147		Layer_404_clone[ Temp ] = Temp_shape_clone;
148		Layer_404_clone[ Temp ].addTo(map_AD003);
149		Marker_count = Marker_count + 1;
150		Marker_ID_count = Marker_ID_count + 1;
151	    }
152	}
153
154	function Leaflet_Marker_404() {		// マーカー連続設置終了
155		Marker_flag = 0;
156	}
157
158	function Leaflet_Marker_405() {		// マーカー全消去
159		var j = Layer_404.length - 1;
160		for(i = 0; i <= j; i++) {
161			if(Layer_404[i] != null) {
162				map_AD003.removeLayer(Layer_404[i]);
163				map_AD003.removeLayer(Layer_404_clone[ i ]);
164			}
165		}
166		Marker_count = 0;
167		Marker_LAT = new Array();
168		Marker_LON = new Array();
169		Marker_NAM = new Array();
170		Marker_LNK = new Array();
171		Marker_ICN = new Array();
172	}
173
174	function Leaflet_Marker_406() {		// マーカー保存(CSV形式)
175	    for (i = 0; i <= (Marker_LON.length - 1); i++) {
176		if( !isNaN(Marker_LON[ i ]) ) {
177		    while( (Marker_LON[ i ] * 1.0) < -180) {
178			Marker_LON[ i ] = (Marker_LON[ i ] * 1.0) + 360;
179		    }
180		    while( (Marker_LON[ i ] * 1.0) > 180) {
181			Marker_LON[ i ] = (Marker_LON[ i ] * 1.0) - 360;
182		    }
183		}
184	    }
185	    if(Marker_LAT[ 0 ] == "LAT(deg.)") {
186		var CSV_content = [];
187	    } else {
188		var CSV_content = "LAT(deg.),LONG(deg.),Name(by utf-8),Link,\r\n";
189	    }
190		const aTag = document.createElement('a');
191		aTag.download = "CSV_Data.csv";
192		var bom = new Uint8Array([0xEF, 0xBB, 0xBF]);
193		Temp = Marker_LAT.length;
194		for ( i = 0; i < Temp; i++ ) {
195			if( Marker_LAT[ i ] != "" && Marker_LON[ i ] != "" ) {
196			  CSV_content = CSV_content + Marker_LAT[ i ] + "," + Marker_LON[ i ] + "," + Marker_NAM[ i ] + "," + Marker_LNK[ i ] + ",\r\n";
197			}
198		  }
199		var blob = new Blob([ bom, CSV_content ], { "type": "text/csv"});
200		if(window.navigator.msSaveBlob) {
201		     window.navigator.msSaveBlob(blob, aTag.download);					// for IE
202		  } else if (window.URL && window.URL.createObjectURL) {
203			aTag.href = window.URL.createObjectURL(blob);					// for FireFox
204			document.body.appendChild(aTag);
205			aTag.click();
206			document.body.removeChild(aTag);
207		  } else if (window.webkitURL && window.webkitURL.createObject) {
208			aTag.href = (window.URL || window.webkitURL).createObjectURL(blob);		// for Chrome
209			aTag.click();
210		  } else {
211			alert("保存に失敗しました!");
212		  }
213	}
214
215	function Leaflet_Marker_407() {		// マーカー読込(CSV形式)
216		Dialog_002();
217	}
218
219	function Marker_setting() {		// マーカー設定
220		Temp_LAT = Marker_LAT[ Temp ] * 1.0;
221		Temp_LON = Marker_LON[ Temp ] * 1.0;
222		Temp_NAM = Marker_NAM[ Temp ];
223		Temp_LNK = Marker_LNK[ Temp ];
224		Temp_ICN = Marker_ICN[ Temp ];
225		Temp_ID = Marker_ID[ Temp ];
226		Temp_Drag_flag = Marker_Drag_flag[ Temp ]
227		Temp_Drag_info = Marker_Drag_info[ Temp ]
228		Set_Link =" ";
229		if(Temp_LNK != undefined ) {
230		    if( String( Temp_LNK ).length > 5 ) {
231			Set_Link = "<a href= '" + Temp_LNK + "' target='_blank'> " + Temp_NAM + "情報にリンク</a>";
232		    }
233		}
234	}
235
236	function Marker_set() {			// マーカー設置
237	  if( !isNaN( Temp_LAT ) && !isNaN( Temp_LON ) ) {
238	    if( (Temp_LAT !== undefined) || (Temp_LAT !== "") ) {
239		if( ((Temp_LAT * 1.0) != 0) || ((Temp_LON * 1.0) != 0) ) {
240		    Temp_shape = L.marker([ Temp_LAT, Temp_LON ],
241			{icon: Temp_ICN, id: Temp_ID, draggable: Temp_Drag_flag}).bindPopup( Temp_NAM + "<BR>" + Temp_Drag_info + "<BR>" +
242			 "<p> <input type='button' value='Change this Marker' class='marker-change-button'/></p>" +
243			 Set_Link + "<p> <input type='button' value='Delete this Marker' class='marker-delete-button'/></p>");
244		    Temp_shape.on('popupopen', onMarkerOpen ).on('dragend', Dragging);
245		    if(Temp_LON >= 0) {
246			Temp_shape_clone = L.marker([ Temp_LAT, (Temp_LON - 360) ],
247			    {icon: Temp_ICN, id: Temp_ID, draggable: Temp_Drag_flag}).bindPopup( Temp_NAM + "<BR>" + Temp_Drag_info + "<BR>" +
248			 "<p> <input type='button' value='Change this Marker' class='marker-change-button'/></p>" +
249			 Set_Link + "<p> <input type='button' value='Delete this Marker' class='marker-delete-button'/></p>");
250			Temp_shape_clone.on('popupopen', onMarkerOpen ).on('dragend', Dragging);
251		    } else {
252			Temp_shape_clone = L.marker([ Temp_LAT, (Temp_LON + 360) ],
253			    {icon: Temp_ICN, id: Temp_ID, draggable: Temp_Drag_flag}).bindPopup( Temp_NAM + "<BR>" + Temp_Drag_info + "<BR>" +
254			 "<p> <input type='button' value='Change this Marker' class='marker-change-button'/></p>" +
255			 Set_Link + "<p> <input type='button' value='Delete this Marker' class='marker-delete-button'/></p>");
256			Temp_shape_clone.on('popupopen', onMarkerOpen ).on('dragend', Dragging);
257		    }
258		}
259	    }
260	  }
261	}
262
263	function onMarkerOpen() {		// マーカーをクリックした時に表示する削除ボタンと変更ボタン
264	    var tempMarker = this;
265	    SelectedID = tempMarker.options.id;
266	    $(".marker-delete-button:visible").click(function () {
267		if(SelectedID.slice(0,5) =="Photo") {
268		    Photo_Marker_DEL(tempMarker);
269		} else  { 
270		    Marker_DEL(tempMarker);
271		}
272	    });
273	    $(".marker-change-button:visible").click(function () {
274		Dialog_001();
275	    });
276	}
277
278	function Change_Marker() {		// 変更ボタン押下時の処理
279	    for(i = 0; i <= Marker_count; i++) {
280		if(SelectedID == Marker_ID[ i ] ) {
281		    if(Set_Text !="") {
282			Marker_NAM[ i ] = Set_Text;
283		    }
284			Marker_ICN[ i ] = L.icon({
285				iconUrl: Icon_Url,
286				iconSize: [Icon_W, Icon_H],
287				iconAnchor : [Icon_AW, Icon_AH],
288				popupAnchor: [Icon_PW, Icon_PH]
289			});
290		}
291	    }
292	    for(i = 0; i <= Photo_Marker_count; i++) {
293		if(SelectedID == Photo_Marker_ID[ i ] ) {
294		    if(Set_Text !="") {
295			Photo_Marker_NAM[ i ] = Set_Text;
296		    }
297			Photo_Marker_ICN[ i ] = L.icon({
298				iconUrl: Icon_Url,
299				iconSize: [Icon_W, Icon_H],
300				iconAnchor : [Icon_AW, Icon_AH],
301				popupAnchor: [Icon_PW, Icon_PH]
302			});
303		} 
304	    }
305	    Marker_Refresh();
306	    Photo_Marker_Refresh(); 
307	}
308
309	function Marker_DEL(tempMarker) {	// 削除ボタン押下時の処理
310		var k = 0;
311		Marker_flag = 0;
312		Marker_LAT[ Marker_count + 1 ] = "";
313		Marker_LON[ Marker_count + 1 ] = "";
314		Marker_NAM[ Marker_count + 1 ] = "";
315		Marker_LNK[ Marker_count + 1 ] = "";
316		Marker_ICN[ Marker_count + 1 ] = "";
317		Marker_ID[ Marker_count + 1 ] = "";
318		SelectedID = tempMarker.options.id;
319		for(i = 0; i <= Marker_count; i++) {
320			if(SelectedID == Marker_ID[ i ] ) {
321				for(k = i; k <= Marker_count; k++) {
322					Marker_LAT[ k ] = Marker_LAT[ k + 1 ];
323					Marker_LON[ k ] = Marker_LON[ k + 1 ];
324					Marker_NAM[ k ] = Marker_NAM[ k + 1 ];
325					Marker_LNK[ k ] = Marker_LNK[ k + 1 ];
326					Marker_ICN[ k ] = Marker_ICN[ k + 1 ];
327					Marker_ID[ k ] = Marker_ID[ k + 1 ];
328					Marker_Drag_flag[ k ] = Marker_Drag_flag[ k + 1 ];
329					Marker_Drag_info[ k ] = Marker_Drag_info[ k + 1 ];
330				}
331			}
332		}
333		SelectedID = null;
334		Marker_count = Marker_count - 1;
335		Marker_Refresh();
336	}
337
338	function Photo_Marker_DEL(tempMarker) {		// 削除ボタン押下時の処理(写真用マーカー)
339		var k = 0;
340		Marker_flag = 0;
341		Photo_Marker_LAT[ Photo_Marker_count + 1 ] = "";
342		Photo_Marker_LON[ Photo_Marker_count + 1 ] = "";
343		Photo_Marker_NAM[ Photo_Marker_count + 1 ] = "";
344		Photo_Marker_LNK[ Photo_Marker_count + 1 ] = "";
345		Photo_Marker_ICN[ Photo_Marker_count + 1 ] = "";
346		Photo_Marker_ID[ Photo_Marker_count + 1 ] = "";
347		SelectedID = tempMarker.options.id;
348		for(i = 0; i <= Photo_Marker_count; i++) {
349			if(SelectedID == Photo_Marker_ID[ i ] ) {
350				for(k = i; k <= Photo_Marker_count; k++) {
351					Photo_Marker_LAT[ k ] = Photo_Marker_LAT[ k + 1 ];
352					Photo_Marker_LON[ k ] = Photo_Marker_LON[ k + 1 ];
353					Photo_Marker_NAM[ k ] = Photo_Marker_NAM[ k + 1 ];
354					Photo_Marker_LNK[ k ] = Photo_Marker_LNK[ k + 1 ];
355					Photo_Marker_ICN[ k ] = Photo_Marker_ICN[ k + 1 ];
356					Photo_Marker_ID[ k ] = Photo_Marker_ID[ k + 1 ];
357					Photo_Marker_Drag_flag[ k ] = Photo_Marker_Drag_flag[ k + 1 ];
358					Photo_Marker_Drag_info[ k ] = Photo_Marker_Drag_info[ k + 1 ];
359				}
360			}
361		}
362		SelectedID = null;
363		Photo_Marker_count = Photo_Marker_count - 1;
364		Photo_Marker_Refresh();
365	}
366 
367	function Marker_Refresh() {		// マーカー再表示
368		var j = Layer_404.length - 1;
369		for(i = 0; i <= j; i++) {
370		    if(Layer_404[ i ] != null) {
371			map_AD003.removeLayer(Layer_404[ i ]);
372			map_AD003.removeLayer(Layer_404_clone[ i ]);
373		    }
374		}
375		for (i = 0; i <= Marker_count - 1; i++)
376		{
377			Temp = i;
378			Marker_setting();
379			Marker_set();
380			Layer_404[ Temp ] = Temp_shape;
381			Layer_404[ Temp ].addTo(map_AD003);
382			Layer_404_clone[ Temp ] = Temp_shape_clone;
383			Layer_404_clone[ Temp ].addTo(map_AD003);
384		}
385	}
386
387	function Photo_Marker_Refresh() {		// 写真用マーカー再表示
388		var j = Layer_AD003.length - 1;
389		for(i = 0; i <= j; i++) {
390		    if(Layer_AD003[ i ] != null) {
391			map_AD003.removeLayer(Layer_AD003[ i ]);
392			map_AD003.removeLayer(Layer_AD003_clone[ i ]);
393		    }
394		}
395		for (i = 0; i <= Photo_Marker_count - 1; i++)
396		{
397			Temp = i;
398			Photo_Marker_Setting();
399			Photo_Marker_Set();
400			Layer_AD003[ Temp ] = Temp_shape;
401			Layer_AD003[ Temp ].addTo(map_AD003);
402			Layer_AD003_clone[ Temp ] = Temp_shape_clone;
403			Layer_AD003_clone[ Temp ].addTo(map_AD003);
404		}
405	}
406 
407	function Dragging() {			// マーカーをドラッグ時の位置取得
408		ClickLat = this._latlng.lat;
409		ClickLon = this._latlng.lng;
410		SelectedID = this.options.id;
411		if(SelectedID.slice(0,5) == "Photo") {
412		    for(i = 0; i <= Photo_Marker_count; i++) {
413			if(SelectedID == Photo_Marker_ID[ i ] ) {
414				Photo_Marker_LAT[ i ] = ClickLat;
415				Photo_Marker_LON[ i ] = ClickLon;
416			}
417		    }
418		    Photo_Marker_Refresh();
419		} else { 
420		    for(i = 0; i <= Marker_count; i++) {
421			if(SelectedID == Marker_ID[ i ] ) {
422				Marker_LAT[ i ] = ClickLat;
423				Marker_LON[ i ] = ClickLon;
424			}
425		    }
426		    Marker_Refresh();
427		}
428		SelectedID = null;
429	}
430
431	function CSV_Markers() {		// CSVデータを表示
432	    for (i = 0; i <= (Data_CSV.length - 1); i++) {
433		if((Data_CSV[i][0] * 1.0) > 90) {
434		    Data_CSV[i][0] = 90;
435		}
436		if((Data_CSV[i][0] * 1.0) < -90) {
437		    Data_CSV[i][0] = -90;
438		}
439		while( (Data_CSV[i][1] * 1.0) < -180) {
440		    Data_CSV[i][1] = Data_CSV[i][1] * 1.0 + 360;
441		}
442		while( (Data_CSV[i][1] * 1.0) > 180) {
443		    Data_CSV[i][1] = Data_CSV[i][1] * 1.0 - 360;
444		}
445	    }
446	    for (i = 0; i <= (Data_CSV.length - 1); i++) {
447		Marker_LAT[ Marker_count ] = Data_CSV[i][0];
448		Marker_LON[ Marker_count ] = Data_CSV[i][1];
449		Marker_NAM[ Marker_count ] = Data_CSV[i][2];
450		Marker_LNK[ Marker_count ] = Data_CSV[i][3];
451		Marker_ICN[ Marker_count ] = L.icon({
452			iconUrl: Icon_Url,
453			iconSize: [Icon_W, Icon_H],
454			iconAnchor : [Icon_AW, Icon_AH],
455			popupAnchor: [Icon_PW, Icon_PH]
456		});
457		Marker_ID[ Marker_count ] = "Marker" + Marker_ID_count;
458		Marker_Drag_flag[ Marker_count ] = false;
459		Marker_Drag_info[ Marker_count ] = "移動出来ません。";
460		if( Data_CSV[i][0] != "" ) {
461		    if( !isNaN( Data_CSV[i][0] ) ) {
462			Temp = Marker_count;
463			Marker_setting();
464			Marker_set();
465			Layer_404[ Temp ] = Temp_shape;
466			Layer_404[ Temp ].addTo(map_AD003);
467			Layer_404_clone[ Temp ] = Temp_shape_clone;
468			Layer_404_clone[ Temp ].addTo(map_AD003);
469		Marker_count = Marker_count + 1;
470		Marker_ID_count = Marker_ID_count + 1;
471		    }
472		}
473	    }
474	}
475
476	function Leaflet_Photo_001() {			// 写真ファイル読込
477		Dialog_Additional_002();
478	}
479
480	function Leaflet_Photo_002() {			// 写真用マーカー全消去
481		var j = Layer_AD003.length - 1;
482		for(i = 0; i <= j; i++) {
483			if(Layer_AD003[i] != null) {
484				map_AD003.removeLayer(Layer_AD003[i]);
485				map_AD003.removeLayer(Layer_AD003_clone[ i ]);
486			}
487		}
488		Photo_Marker_count = 0;
489		Photo_Marker_LAT = new Array();
490		Photo_Marker_LON = new Array();
491		Photo_Marker_NAM = new Array();
492		Photo_Marker_LNK = new Array();
493		Photo_Marker_ICN = new Array();
494	}
495
496	function Photo_Marker_Setting() {		// 写真用マーカー設定
497		Temp_LAT = Photo_Marker_LAT[ Temp ] * 1.0;
498		Temp_LON = Photo_Marker_LON[ Temp ] * 1.0;
499		Temp_NAM = Photo_Marker_NAM[ Temp ];
500		Temp_LNK = Photo_Marker_LNK[ Temp ];
501		Temp_ICN = Photo_Marker_ICN[ Temp ];
502		Temp_ID = Photo_Marker_ID[ Temp ];
503		Temp_Drag_flag = Photo_Marker_Drag_flag[ Temp ]
504		Temp_Drag_info = Photo_Marker_Drag_info[ Temp ]
505		Set_Link =" ";
506	}
507
508	function Photo_Marker_Set() {			// 写真用マーカー設置
509	  if( !isNaN( Temp_LAT ) && !isNaN( Temp_LON ) ) {
510	    if( (Temp_LAT !== undefined) || (Temp_LAT !== "") ) {
511		if( ((Temp_LAT * 1.0) != 0) || ((Temp_LON * 1.0) != 0) ) {
512		    Temp_shape = L.marker([ Temp_LAT, Temp_LON ],
513			{icon: Temp_ICN, id: Temp_ID, draggable: Temp_Drag_flag}).bindPopup( Temp_NAM + "<BR>" + Temp_Drag_info + "<BR>" +
514			 "<p><center> <img src = '" + window.URL.createObjectURL(Temp_LNK) + "' width='300'></center></p>" +
515			 "<p> <input type='button' value='Change this Marker' class='marker-change-button'/>" +
516			 " <input type='button' value='Delete this Marker' class='marker-delete-button'/></p>");
517		    Temp_shape.on('popupopen', onMarkerOpen ).on('dragend', Dragging);
518		    if(Temp_LON >= 0) {
519			Temp_shape_clone = L.marker([ Temp_LAT, (Temp_LON - 360) ],
520			    {icon: Temp_ICN, id: Temp_ID, draggable: Temp_Drag_flag}).bindPopup( Temp_NAM + "<BR>" + Temp_Drag_info + "<BR>" +
521			 "<p><center> <img src = '" + window.URL.createObjectURL(Temp_LNK) + "' width='300'></center></p>" +
522			 "<p> <input type='button' value='Change this Marker' class='marker-change-button'/>" +
523			 " <input type='button' value='Delete this Marker' class='marker-delete-button'/></p>");
524			Temp_shape_clone.on('popupopen', onMarkerOpen ).on('dragend', Dragging);
525		    } else {
526			Temp_shape_clone = L.marker([ Temp_LAT, (Temp_LON + 360) ],
527			    {icon: Temp_ICN, id: Temp_ID, draggable: Temp_Drag_flag}).bindPopup( Temp_NAM + "<BR>" + Temp_Drag_info + "<BR>" +
528			 "<p><center> <img src = '" + window.URL.createObjectURL(Temp_LNK) + "' width='300'></center></p>" +
529			 "<p> <input type='button' value='Change this Marker' class='marker-change-button'/>" +
530			 " <input type='button' value='Delete this Marker' class='marker-delete-button'/></p>");
531			Temp_shape_clone.on('popupopen', onMarkerOpen ).on('dragend', Dragging);
532		    }
533		}
534	        var image = document.createElement('img');
535		image.src = window.URL.createObjectURL(Temp_LNK);
536	    }
537	  }
538	}
539 
540	</script>
541  </head>
542  <body onload="init()">
543  <nav id="menu-wrap" style="z-index: 1000;">  
544	<ul id="menu" style="width: 97.3%;">
545		<li><a href="#">マーカー設定</a>
546		<ul>
547			<li><a href="#" onclick = "Dialog_001()">マーカーのスタイル設定</a></li>
548			<li><a href="#" onclick = "Leaflet_Marker_400()">マーカー単独設置 </a></li>
549			<li><a href="#" onclick = "Leaflet_Marker_402()">マーカー連続設置 </a></li>
550			<li><a href="#" onclick = "Leaflet_Marker_404()">マーカー連続設置終了 </a></li>
551			<li><a href="#" onclick = "Leaflet_Marker_405()">マーカー全消去 </a></li>
552			<li><a href="#" onclick = "Leaflet_Marker_406()">マーカー保存(CSV形式) </a></li>
553			<li><a href="#" onclick = "Leaflet_Marker_407()">マーカー読込(CSV形式) </a></li>
554		</ul>
555		</li>
556		<li><a href="#">写真の撮影地表示</a>
557		<ul>
558			<li><a href="#" onclick = "Dialog_001()">マーカーのスタイル設定</a></li>
559			<li><a href="#" onclick = "Leaflet_Photo_001()">写真ファイル読込 </a></li>
560			<li><a href="#" onclick = "Leaflet_Photo_002()">写真用マーカー全消去 </a></li>
561		</ul>
562		</li> 
563	</ul>
564  </nav>
565  <div id="map_Layer">
566	<div id="map_AD003" style="width: 100%; height: 95%; border: solid 1px"></div>
567   ここで使用しているアイコン素材は、<A HREF = "http://flat-icon-design.com/" target="_blank"> FLAT ICON DESIGN </A>および
568  <A HREF = "http://icooon-mono.com/" target="_blank"> ICOON MONO </A>から取得しており、これらアイコン素材データの著作権は TopeconHeroes が保持しています。
569  </div>
570  </body>
571  </html>



 『 Dialog_Additional_003.js 』は、『Dialog_404.js』を元に写真ファイルの読込、ダイアログ・ボックス内に選択した写真の表示、 EXIFデータから地図上にマーカーを表示する機能を追加した JavaScriptファイルです。  追加した箇所は赤字で表示しています。

       『 Dialog_Additional_003.js 』のソースファイル内容
001  // Dialog_Additional_003.js	2019/5/17 by T. Fujita
002
003  var Set_Text = "";
004  var Set_Link = " ";
005  var Icon_Url = "../ICONS/BW_Icon/BW_Icons_64/icon_000200_64.png";
006  var Icon_W = 24;
007  var Icon_H = 24;
008  var Icon_AW = Math.round(Icon_W / 2);
009  var Icon_AH = Math.round(Icon_H / 2);
010  var Icon_PW = 0;
011  var Icon_PH = Math.round(Icon_H / 2) * -1;
012  var Max_M_Size = 64;
013  var Min_M_Size = 8;
014  var Data_CSV = new Array();
015  var Photo_file = new Array();
016  var file; 
017
018  $(document).ready( function() {
019	$("body").append('<div id="dialog_001" style="z-index: 2000;"><p><form name="Form_001"> Title: '+
020  '<input type="text" style="width: 230px;" name="txt_mk" value=""></form><BR>'+
021  '<div>Marker Select:<BR>'+
022  '<select id="Marker_Samples" name="Marker_Samples" style="width:150px;">'+
023  '<option value="1" title="../ICONS/BW_Icon/BW_Icons_64/icon_000200_64.png">001</option>'+
024  '<option value="2" title="../ICONS/BW_Icon/BW_Icons_64/icon_127890_64.png">002</option>'+
025  '<option value="3" title="../ICONS/BW_Icon/BW_Icons_64/icon_114880_64.png">003</option>'+
026  '<option value="4" title="../ICONS/BW_Icon/BW_Icons_64/icon_109890_64.png">004</option>'+
027  '<option value="5" title="../ICONS/BW_Icon/BW_Icons_64/icon_001050_64.png">005</option>'+
028  '<option value="6" title="../ICONS/BW_Icon/BW_Icons_64/icon_119170_64.png">006</option>'+
029  '<option value="7" title="../ICONS/BW_Icon/BW_Icons_64/icon_122590_64.png">007</option>'+
030  '<option value="8" title="../ICONS/BW_Icon/BW_Icons_64/icon_000220_64.png">008</option>'+
031  '<option value="9" title="../ICONS/BW_Icon/BW_Icons_64/icon_133000_64.png">009</option>'+
032  '<option value="10" title="../ICONS/BW_Icon/BW_Icons_64/icon_115740_64.png">010</option>'+
033  '<option value="11" title="../ICONS/BW_Icon/BW_Icons_64/icon_115710_64.png">011</option>'+
034  '<option value="12" title="../ICONS/BW_Icon/BW_Icons_64/icon_115750_64.png">012</option>'+
035  '<option value="13" title="../ICONS/BW_Icon/BW_Icons_64/icon_115720_64.png">013</option>'+
036  '<option value="14" title="../ICONS/BW_Icon/BW_Icons_64/icon_147060_64.png">014</option>'+
037  '<option value="15" title="../ICONS/BW_Icon/BW_Icons_64/icon_127900_64.png">015</option>'+
038  '<option value="16" title="../ICONS/BW_Icon/BW_Icons_64/icon_109850_64.png">016</option>'+
039  '<option value="17" title="../ICONS/BW_Icon/BW_Icons_64/icon_111050_64.png">017</option>'+
040  '<option value="18" title="../ICONS/BW_Icon/BW_Icons_64/icon_111060_64.png">018</option>'+
041  '<option value="19" title="../ICONS/BW_Icon/BW_Icons_64/icon_111520_64.png">019</option>'+
042  '<option value="20" title="../ICONS/BW_Icon/BW_Icons_64/icon_127100_64.png">020</option>'+
043  '<option value="21" title="../ICONS/BW_Icon/BW_Icons_64/icon_127110_64.png">021</option>'+
044  '<option value="22" title="../ICONS/BW_Icon/BW_Icons_64/icon_127120_64.png">022</option>'+
045  '<option value="23" title="../ICONS/BW_Icon/BW_Icons_64/icon_127130_64.png">023</option>'+
046  '<option value="24" title="../ICONS/BW_Icon/BW_Icons_64/icon_127140_64.png">024</option>'+
047  '<option value="25" title="../ICONS/BW_Icon/BW_Icons_64/icon_127150_64.png">025</option>'+
048  '<option value="26" title="../ICONS/BW_Icon/BW_Icons_64/icon_127160_64.png">026</option>'+
049  '<option value="27" title="../ICONS/BW_Icon/BW_Icons_64/icon_001720_64.png">027</option>'+
050  '<option value="28" title="../ICONS/BW_Icon/BW_Icons_64/icon_100590_64.png">028</option>'+
051  '<option value="29" title="../ICONS/BW_Icon/BW_Icons_64/icon_100600_64.png">029</option>'+
052  '<option value="30" title="../ICONS/BW_Icon/BW_Icons_64/icon_102040_64.png">030</option>'+
053  '<option value="31" title="../ICONS/BW_Icon/BW_Icons_64/icon_104940_64.png">031</option>'+
054  '<option value="32" title="../ICONS/BW_Icon/BW_Icons_64/icon_107470_64.png">032</option>'+
055  '<option value="33" title="../ICONS/BW_Icon/BW_Icons_64/icon_108510_64.png">033</option>'+
056  '<option value="34" title="../ICONS/BW_Icon/BW_Icons_64/icon_108730_64.png">034</option>'+
057  '<option value="35" title="../ICONS/BW_Icon/BW_Icons_64/icon_111960_64.png">035</option>'+
058  '<option value="36" title="../ICONS/BW_Icon/BW_Icons_64/icon_111970_64.png">036</option>'+
059  '<option value="37" title="../ICONS/BW_Icon/BW_Icons_64/icon_112440_64.png">037</option>'+
060  '<option value="38" title="../ICONS/BW_Icon/BW_Icons_64/icon_112450_64.png">038</option>'+
061  '<option value="39" title="../ICONS/BW_Icon/BW_Icons_64/icon_113000_64.png">039</option>'+
062  '<option value="40" title="../ICONS/BW_Icon/BW_Icons_64/icon_113010_64.png">040</option>'+
063  '<option value="41" title="../ICONS/BW_Icon/BW_Icons_64/icon_114520_64.png">041</option>'+
064  '<option value="42" title="../ICONS/BW_Icon/BW_Icons_64/icon_114530_64.png">042</option>'+
065  '<option value="43" title="../ICONS/BW_Icon/BW_Icons_64/icon_114770_64.png">043</option>'+
066  '<option value="44" title="../ICONS/BW_Icon/BW_Icons_64/icon_114780_64.png">044</option>'+
067  '<option value="45" title="../ICONS/BW_Icon/BW_Icons_64/icon_128020_64.png">045</option>'+
068  '<option value="46" title="../ICONS/BW_Icon/BW_Icons_64/icon_124660_64.png">046</option>'+
069  '<option value="47" title="../ICONS/BW_Icon/BW_Icons_64/icon_127930_64.png">047</option>'+
070  '<option value="48" title="../ICONS/Flat_Icons/s64_f_business_72_0nbg.png">048</option>'+
071  '<option value="49" title="../ICONS/Flat_Icons/s64_f_business_76_0nbg.png">049</option>'+
072  '<option value="50" title="../ICONS/Flat_Icons/s64_f_object_6_2nbg.png">050</option>'+
073  '<option value="51" title="../ICONS/Flat_Icons/s64_f_object_7_2nbg.png">051</option>'+
074  '<option value="52" title="../ICONS/Flat_Icons/s64_f_object_24_1nbg.png">052</option>'+
075  '<option value="53" title="../ICONS/Flat_Icons/s64_f_object_25_0nbg.png">053</option>'+
076  '<option value="54" title="../ICONS/Flat_Icons/s64_f_object_27_2nbg.png">054</option>'+
077  '<option value="55" title="../ICONS/Flat_Icons/s64_f_object_155_1nbg.png">055</option>'+
078  '<option value="56" title="../ICONS/Flat_Icons/s64_f_object_164_2nbg.png">056</option>'+
079  '<option value="57" title="../ICONS/Flat_Icons/s64_f_object_167_0nbg.png">057</option>'+
080  '<option value="58" title="../ICONS/Flat_Icons/s64_f_object_173_0nbg.png">058</option>'+
081  '<option value="59" title="../ICONS/Flat_Icons/s64_f_object_115_0nbg.png">059</option>'+
082  '<option value="60" title="../ICONS/Flat_Icons/s64_f_object_116_1nbg.png">060</option>'+
083  '</select></div><BR>'+
084  '<div><tr><td><BR><div id="num_001"></div><div id="slider_001"></div>'+
085  '<BR><BR><div id="Selected_Icon">Selected Icon: <img src=""></div>'+
086  '</td></tr></div><BR>(注) ここで使用しているアイコン素材は、<A HREF = "http://flat-icon-design.com/" target="_blank"> FLAT ICON DESIGN </A>および' +
087  '<A HREF = "http://icooon-mono.com/" target="_blank"> ICOON MONO </A>から取得しており、<BR>' +
088  'これらアイコン素材データの著作権は TopeconHeroes が保持しています。</p><div>');
089
090	$('#Selected_Icon img').attr('src', Icon_Url);
091
092	$('#dialog_001').dialog({
093		autoOpen: false,
094		title: 'Please Set the Icon Style.',
095		height: 450,
096		width: 300,
097		closeOnEscape: true,
098		modal: true,
099		buttons: {
100			"設定": function(){
101				Set_Text = document.Form_001.txt_mk.value;
102				var Temp = Marker_Samples.options[Marker_Samples.selectedIndex].title;
103				Icon_Url = Temp;
104				Icon_AW = Math.round(Icon_W / 2);
105				Icon_AH = Math.round(Icon_H / 2);
106				Icon_PW = 0;
107				Icon_PH = Math.round(Icon_H / 2) * -1;
108				Change_Marker(); 
109				$(this).dialog('close');
110			}
111		}
112	});
113
114	$("body").append('<div id="dialog_002" style="z-index: 2000;"><p><form name="Form_002">'+
115  'Title: <input type="text" style="width: 230px;" name="txt_dat" value=""></form></p><HR>'+
116  '<p> File Select:'+
117  '<form name="subinput">'+
118  '<center>CSVファイルを指定してください。<BR><BR>'+
119  '  <TD><input type="file" name="select" id="select_002" value="" onchange="CSV_Data()"></TD>'+
120  '  <BR><BR>'+
121  '</center></form></p></div>');
122
123	$('#dialog_002').dialog({
124		autoOpen: false,
125		title: 'CSVファイル選択',
126		height: 400,
127		width: 300,
128		closeOnEscape: true,
129		modal: true,
130		show: "fade",
131		hide: "fade",
132		buttons: {
133			"Select the Marker": function(){
134				Dialog_001();
135			},
136			"Set Markers": function(){
137				CSV_Markers();
138			},
139			"Close": function(){
140				$(this).dialog('close');
141			}
142		}
143	});
144
145	$("body").append('<div id="dialog_AD_002" style="z-index: 2000;"><p><form name="Form_AD_002">'+
146  'Title: <input type="text" style="width: 230px;" name="txt_file" value=""></form></p><HR>'+
147  '<p> File Select: 写真ファイルを指定してください。'+
148  '<form name="photoinput">'+
149  '<center><TD><input type="file" accept="image/*" name="select_AD" id="select_AD_002" value="" onchange="updateImageDisplay()"></TD>'+
150  '  <BR>'+
151  '<div class="preview"><p>ファイルが選択されていません</p></div></center></form></p></div>');
152
153	$('#dialog_AD_002').dialog({
154		autoOpen: false,
155		title: '写真ファイル選択',
156		height: 400,
157		width: 300,
158		closeOnEscape: true,
159		modal: true,
160		show: "fade",
161		hide: "fade",
162		buttons: {
163			"Select the Marker": function(){
164				Dialog_001();
165			},
166			"Set Photo Marker": function(){
167				Photo_Data();
168			},
169			"Close": function(){
170				$(this).dialog('close');
171			}
172		}
173	}); 
174
175
176	$('#slider_001').slider( {
177		orientation: 'horizontal',
178		range: 'min',
179		max: 255,
180		value: 127,
181		slide: refreshSwatch,
182		change: refreshSwatch
183	} );
184	$( '#slider_001' ).slider( 'value', 96 );
185	$( '#Marker_Samples' ).msDropDown({
186		visibleRows:4,
187		on:{change:function(data, ui) {
188			Icon_Url = Marker_Samples.options[Marker_Samples.selectedIndex].title;
189			$('#Selected_Icon img').attr('src', Icon_Url);
190		}}
191	});
192  });
193
194
195  function Dialog_001() {
196	document.Form_001.txt_mk.value = "";
197	$('#dialog_001').dialog('open');
198  }
199
200  function Dialog_002() {
201	document.Form_002.txt_dat.value = "";
202	document.subinput.select.value = "";
203	$('#dialog_002').dialog('open');
204  }
205
206  function Dialog_Additional_002() {
207	var preview = document.querySelector('.preview');
208	document.Form_AD_002.txt_file.value = "";
209	document.photoinput.select_AD.value = "";
210	while(preview.firstChild){
211		preview.removeChild(preview.firstChild);
212	}
213	$('#dialog_AD_002').dialog('open');
214  } 
215
216
217  function refreshSwatch() {
218	Icon_W = Math.round($('#slider_001').slider('value') / 255 * Max_M_Size);
219	if (Icon_W <= Min_M_Size) { Icon_W = Min_M_Size; }
220	Icon_H = Icon_W;
221	$( '#num_001' ).html( 'Marker Size: ' + Icon_W );
222	$( '#Selected_Icon img' ).css( { width: Icon_W, height: Icon_H } );
223  }
224
225  function CSV_Data() {
226	var file_input = $('#select_002');
227	var fileData = file_input[0].files[0];
228
229	Data_CSV = [];
230	var reader = new FileReader();
231	reader.onerror = function() {
232		alert('ファイル読み込みに失敗しました。');
233	}
234	reader.onload = function() {
235		var lineArr = reader.result.split("\r\n");
236		for (var i = 0; i < lineArr.length; i++) {
237			Data_CSV[i] = lineArr[i].split(",");
238		}
239	}
240	reader.readAsText(fileData);
241  }
242
243  function Photo_Data() {
244	var Temp_Lat;
245	var Temp_Lon;
246	var Temp_Date;
247	var Temp_Name;
248	var Temp_Pos;
249	var NSEW;
250	var image = document.createElement('img');
251	image.src = window.URL.createObjectURL(file);
252
253	EXIF.getData(file, function() {				// EXIF.getDataでexif情報を解析
254	    Temp_Pos = EXIF.getTag(this, "GPSLatitude");	// EXIF.getTag(this, "[exifのタグ名]")で、値を取得
255	  if( Temp_Pos === undefined ) {
256	    alert("写真の位置情報はありません!\n" + "マーカーは任意の位置に移動できます。");
257	    Photo_Data_Set();
258	  } else {
259	    Temp_Pos = EXIF.getTag(this, "GPSLatitude");
260	    NSEW = EXIF.getTag(this, "GPSLatitudeRef");
261	    if(NSEW == "N") {
262		Temp_Lat = Temp_Pos[0] + Temp_Pos[1]/60 + Temp_Pos[2]/60/60;
263	    } else {
264		Temp_Lat = (Temp_Pos[0] + Temp_Pos[1]/60 + Temp_Pos[2]/60/60) * -1.0;
265	    }
266	    Temp_Pos = EXIF.getTag(this, "GPSLongitude");
267	    NSEW = EXIF.getTag(this, "GPSLongitudeRef");
268	    if(NSEW == "E") {
269		Temp_Lon = Temp_Pos[0] + Temp_Pos[1]/60 + Temp_Pos[2]/60/60;
270	    } else {
271		Temp_Lon = (Temp_Pos[0] + Temp_Pos[1]/60 + Temp_Pos[2]/60/60) * -1.0;
272	    }
273	    Temp_Date = EXIF.getTag(this, "DateTimeOriginal");
274	    Temp_Name = file.name;
275	    Photo_Marker_LAT[ Photo_Marker_count ] = Temp_Lat;
276	    Photo_Marker_LON[ Photo_Marker_count ] = Temp_Lon;
277	    Photo_Marker_NAM[ Photo_Marker_count ] = Temp_Date + "の写真";
278	    Photo_Marker_LNK[ Photo_Marker_count ] = file;
279	    Photo_Marker_ICN[ Photo_Marker_count ] = L.icon({
280		iconUrl: Icon_Url,
281		iconSize: [Icon_W, Icon_H],
282		iconAnchor : [Icon_AW, Icon_AH],
283		popupAnchor: [Icon_PW, Icon_PH]
284	    });
285		Photo_Marker_ID[ Photo_Marker_count ] = "Photo" + Photo_Marker_ID_count;
286		Photo_Marker_Drag_flag[ Photo_Marker_count ] = false;
287		Photo_Marker_Drag_info[ Photo_Marker_count ] = "マウスで移動出来ません。";
288		Temp = Photo_Marker_count;
289		Photo_Marker_Setting();
290		Photo_Marker_Set();
291		Layer_AD003[ Temp ] = Temp_shape;
292		Layer_AD003[ Temp ].addTo(map_AD003);
293		Layer_AD003_clone[ Temp ] = Temp_shape_clone;
294		Layer_AD003_clone[ Temp ].addTo(map_AD003);
295		Photo_Marker_count = Photo_Marker_count + 1;
296		Photo_Marker_ID_count = Photo_Marker_ID_count + 1;
297	  }
298	});
299  }
300
301  function Photo_Data_Set() {
302	var Temp_Lat = map_AD003.getCenter().lat;
303	var Temp_Lon = map_AD003.getCenter().lng;
304	var Temp_Name;
305	var image = document.createElement('img');
306	image.src = window.URL.createObjectURL(file);
307	Temp_Name = file.name;
308	Photo_Marker_LAT[ Photo_Marker_count ] = Temp_Lat;
309	Photo_Marker_LON[ Photo_Marker_count ] = Temp_Lon;
310	Photo_Marker_NAM[ Photo_Marker_count ] = Temp_Name + "の写真";
311	Photo_Marker_LNK[ Photo_Marker_count ] = file;
312	Photo_Marker_ICN[ Photo_Marker_count ] = L.icon({
313		iconUrl: Icon_Url,
314		iconSize: [Icon_W, Icon_H],
315		iconAnchor : [Icon_AW, Icon_AH],
316		popupAnchor: [Icon_PW, Icon_PH]
317	});
318	Photo_Marker_ID[ Photo_Marker_count ] = "Photo" + Photo_Marker_ID_count;
319	Photo_Marker_Drag_flag[ Photo_Marker_count ] = true;
320	Photo_Marker_Drag_info[ Photo_Marker_count ] = "マウスで移動出来ます。";
321	Temp = Photo_Marker_count;
322	Photo_Marker_Setting();
323	Photo_Marker_Set();
324	Layer_AD003[ Temp ] = Temp_shape;
325	Layer_AD003[ Temp ].addTo(map_AD003);
326	Layer_AD003_clone[ Temp ] = Temp_shape_clone;
327	Layer_AD003_clone[ Temp ].addTo(map_AD003);
328	Photo_Marker_count = Photo_Marker_count + 1;
329	Photo_Marker_ID_count = Photo_Marker_ID_count + 1;
330  }
331
332  function updateImageDisplay() {
333	var preview = document.querySelector('.preview');
334	var file_input = $('#select_AD_002');
335	file = file_input[0].files[0];
336	var para = document.createElement('p');
337	if(file === undefined) {
338		para.textContent = 'ファイルが選択されていません!';
339		preview.removeChild(preview.childNodes.item(0));
340		preview.appendChild(para);
341	} else {
342		para.textContent = 'ファイル名: ' + file.name;
343		while(preview.firstChild){
344			preview.removeChild(preview.firstChild);
345		}
346		preview.appendChild(para);
347		var image = document.createElement('img');
348		image.src = window.URL.createObjectURL(file);
349		preview.appendChild(image);
350	}
351  } 




Previous Page Next Page

- 11 -